|
| 1 | +from ordered_model.models import OrderedModel |
1 | 2 | from django.core import exceptions |
2 | 3 | from django.db import models |
3 | 4 | from django.urls import reverse |
|
9 | 10 | from api.helpers.ids import encode_hashid |
10 | 11 | from i18n.fields import I18nCharField, I18nTextField |
11 | 12 |
|
12 | | -from .querysets import SubmissionQuerySet |
| 13 | +from .querysets import ProposalCoSpeakerQuerySet, SubmissionQuerySet |
13 | 14 |
|
14 | 15 |
|
15 | 16 | class SubmissionTag(models.Model): |
@@ -212,6 +213,44 @@ def __str__(self): |
212 | 213 | ) |
213 | 214 |
|
214 | 215 |
|
| 216 | +class ProposalCoSpeakerStatus(models.TextChoices): |
| 217 | + pending = "pending", _("Pending") |
| 218 | + accepted = "accepted", _("Accepted") |
| 219 | + rejected = "rejected", _("Rejected") |
| 220 | + |
| 221 | + |
| 222 | +class ProposalCoSpeaker(TimeStampedModel, OrderedModel): |
| 223 | + conference_reference = "proposal__conference" |
| 224 | + |
| 225 | + status = models.CharField( |
| 226 | + _("status"), |
| 227 | + choices=ProposalCoSpeakerStatus.choices, |
| 228 | + max_length=30, |
| 229 | + default=ProposalCoSpeakerStatus.pending, |
| 230 | + ) |
| 231 | + proposal = models.ForeignKey( |
| 232 | + "submissions.Submission", |
| 233 | + on_delete=models.CASCADE, |
| 234 | + verbose_name=_("proposal"), |
| 235 | + related_name="co_speakers", |
| 236 | + ) |
| 237 | + |
| 238 | + user = models.ForeignKey( |
| 239 | + "users.User", |
| 240 | + on_delete=models.CASCADE, |
| 241 | + null=False, |
| 242 | + blank=False, |
| 243 | + verbose_name=_("user"), |
| 244 | + related_name="+", |
| 245 | + ) |
| 246 | + |
| 247 | + order_with_respect_to = "proposal" |
| 248 | + objects = ProposalCoSpeakerQuerySet().as_manager() |
| 249 | + |
| 250 | + def __str__(self): |
| 251 | + return f"{self.user_id} {self.proposal.title}" |
| 252 | + |
| 253 | + |
215 | 254 | class ProposalMaterial(TimeStampedModel): |
216 | 255 | proposal = models.ForeignKey( |
217 | 256 | "submissions.Submission", |
|
0 commit comments