Одно поле таблицы, исключающее другое в Django Tables - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть две модели, связанные друг с другом.Здесь я пытаюсь избежать повторения.Например, в 9 классе их может быть только один rollno = 32 (не может иметь два), но возможны два одинаковых номера бросков в разных классах.

Пример: name = Mark, grade = 9, rollno = 32 иname = Shub, оценка = 9, rollno = 32 не должно быть возможно, но имя = Mark, оценка = 9, rollno = 32 и имя = Mark, оценка = 10, rollno = 32 должно быть возможно.

class Grade(models.Model):
    grade = models.CharField(max_length=255, primary_key=True)

class Student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.ForeignKey(grade, on_delete=models.CASCADE)
    rollno = models.BigIntegerField()

Я не совсем уверен, как добавить эту функцию.Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам необходимо использовать unique_together в классе meta.

class Student(models.Model):
    ...

    class Meta:
        unique_together = ("grade", "rollno")

Подробная документация доступна здесь

0 голосов
/ 11 февраля 2019

Вам необходимо добавить метакласс в вашу модель.

Ваша модель ученика будет выглядеть примерно так:

    class Student(models.Model):
        class Meta:
            unique_together = ("grade", "rollno")

        name = models.CharField(max_length=255)
        grade = models.ForeignKey(grade, on_delete=models.CASCADE)
        rollno = models.BigIntegerField()

Документация по мета-опциям для моделей django находится здесь: https://docs.djangoproject.com/en/2.1/ref/models/options/#unique-together

Они действительно полезны.

В качестве примечания принято использовать подчеркивания и полные слова в именах переменных.Вы должны рассмотреть вопрос об изменении rollno на roll_number.

...