限制Django中外键关系的数量

时间:2020-07-28 08:25:49

标签: django

在Django中是否可以通过外键获得最大数量的关系?

例如,我希望一个用户发表的帖子不超过10个。我初始化模型

class Post(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

我应该在哪里添加此检查?还是不可能,我应该考虑一下?

1 个答案:

答案 0 :(得分:1)

这就是我要怎么做。

每个模型都有一个save()选项,当保存模型时会调用该选项。如果用户已经有10个帖子,则可以在此处检查并引发错误。

package com.example.petmx;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;

import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class mainNavigation extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    MenuItem menuItem;
    DrawerLayout drawerLayout;
    ActionBarDrawerToggle actionBarDrawerToggle;
    Toolbar toolbar;
    NavigationView navigationView;
    FragmentManager fragmentManager;
    FragmentTransaction fragmentTransaction;
    EditText date_time_in;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_navigation);
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawerLayout = findViewById(R.id.drawer);
        navigationView = findViewById(R.id.navigationView);
        navigationView.setNavigationItemSelectedListener(this);

        actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open,R.string.close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
        actionBarDrawerToggle.syncState();

        //to change
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.container_fragment, new NavigationFragment());
        fragmentTransaction.commit();

    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        if (menuItem.getItemId() == R.id.date_time_input){
            startActivity(new Intent(getApplicationContext(),DateTimeDialog.class));
            finish();
        }

        if (menuItem.getItemId() == R.id.home){
            //to change
            drawerLayout.closeDrawer(GravityCompat.START);
            fragmentManager = getSupportFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_fragment, new NavigationFragment());
            fragmentTransaction.commit();
        }
        if (menuItem.getItemId() == R.id.settings){
            drawerLayout.closeDrawer(GravityCompat.START);
            fragmentManager = getSupportFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_fragment, new Navigation2Fragment());
            fragmentTransaction.commit();

        }
        if (menuItem.getItemId() == R.id.logout){
            drawerLayout.closeDrawer(GravityCompat.START);
            //FirebaseAuth.getInstance().signOut();
            startActivity(new Intent(getApplicationContext(),Login.class));
            finish();
        }
        return true;
    }
}
相关问题